001 /*
002 * Copyright 2004 Stephen J. McConnell.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
013 * implied.
014 *
015 * See the License for the specific language governing permissions and
016 * limitations under the License.
017 */
018
019 package net.dpml.metro.info;
020
021 import java.util.Properties;
022
023 /**
024 * A category descriptor describes a logging channel that
025 * a component type uses.
026 *
027 * @author <a href="http://www.dpml.net">Digital Product Meta Library</a>
028 * @version 1.0.1
029 */
030 public class CategoryDescriptor
031 extends Descriptor
032 {
033 /**
034 * Serial version identifier.
035 */
036 static final long serialVersionUID = 1L;
037
038 /**
039 * Constant category separator.
040 */
041 public static final String SEPERATOR = ".";
042
043 /**
044 * Default priority value.
045 */
046 public static final Priority PRIORITY = Priority.DEBUG;
047
048
049 private final String m_name;
050
051 private final Priority m_priority;
052
053 /**
054 * Create a descriptor for logging category.
055 *
056 * @param name the logging category name
057 * @param priority the default priority value
058 * @param attributes a set of attributes associated with the declaration
059 *
060 * @exception NullPointerException if name argument is null
061 */
062 public CategoryDescriptor( final String name, final Priority priority, final Properties attributes )
063 throws NullPointerException
064 {
065 super( attributes );
066 if( null == name )
067 {
068 throw new NullPointerException( "name" );
069 }
070 m_name = name;
071 if( null == priority )
072 {
073 m_priority = PRIORITY;
074 }
075 else
076 {
077 m_priority = priority;
078 }
079 }
080
081 /**
082 * Return the name of logging category.
083 *
084 * @return the category name.
085 */
086 public String getName()
087 {
088 return m_name;
089 }
090
091 /**
092 * Return the default logging priority.
093 *
094 * @return the default priority.
095 */
096 public Priority getDefaultPriority()
097 {
098 return m_priority;
099 }
100
101 /**
102 * Test is the supplied object is equal to this object.
103 * @param other the other object
104 * @return true if the object are equivalent
105 */
106 public boolean equals( Object other )
107 {
108 if( super.equals( other ) && ( other instanceof CategoryDescriptor ) )
109 {
110 CategoryDescriptor descriptor = (CategoryDescriptor) other;
111 if( !equals( m_name, descriptor.m_name ) )
112 {
113 return false;
114 }
115 else
116 {
117 return equals( m_priority, descriptor.m_priority );
118 }
119 }
120 else
121 {
122 return false;
123 }
124 }
125
126 /**
127 * Return the hashcode for the object.
128 * @return the hashcode value
129 */
130 public int hashCode()
131 {
132 int hash = super.hashCode();
133 hash ^= m_name.hashCode();
134 hash ^= m_priority.hashCode();
135 return hash;
136 }
137 }